/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.pucp.sigepa.recocidosimulado.capadatos.impl;

import com.mysema.query.jpa.impl.JPAQuery;
import java.util.Date;
import javax.persistence.Persistence;
import pe.edu.pucp.sigepa.recocidosimulado.Modelo.AeropuertoSim;
import pe.edu.pucp.sigepa.recocidosimulado.Modelo.QAeropuertoSim;
import pe.edu.pucp.sigepa.recocidosimulado.Modelo.QPronosticoSim;
import pe.edu.pucp.sigepa.recocidosimulado.capadatos.interfaz.LogicaAeropuertosSimulacion;

/**
 *
 * @author carloslengua
 */
public class LogicaAeropuertosSimulacionImpl implements LogicaAeropuertosSimulacion {

    @Override
    public Boolean brindaAbasto(Integer idAeropuerto, Date fechaPeticion, Integer nroPaquetes) {
//        throw new UnsupportedOperationException("Not supported yet.");
        
        JPAQuery consulta = new JPAQuery(
                                    Persistence.createEntityManagerFactory("pe.edu.pucp_motor-generador-rutas-RS2_jar_1.0-SNAPSHOTPU", System.getProperties())
                                        .createEntityManager());
        
        QPronosticoSim pronosticoSim = QPronosticoSim.pronosticoSim;
        QAeropuertoSim aeropuertoSim = QAeropuertoSim.aeropuertoSim;
        
        AeropuertoSim aeropuertoSim00 = consulta.from(aeropuertoSim).where(aeropuertoSim.idaeropuerto.eq(idAeropuerto)).uniqueResult(aeropuertoSim);
        
        Integer numPaquetesAeropuertoAlMomentoDeLaVenta = consulta.from(pronosticoSim)
                                                            .where(pronosticoSim.aeropuertoSim.idaeropuerto.eq(idAeropuerto)
                                                                .and(pronosticoSim.fechareg.before(fechaPeticion)))
                                                            .uniqueResult(pronosticoSim.nropack.sum());
        
        
        if (numPaquetesAeropuertoAlMomentoDeLaVenta == null) {
            numPaquetesAeropuertoAlMomentoDeLaVenta = 0;
        }
        
        return numPaquetesAeropuertoAlMomentoDeLaVenta + nroPaquetes <= aeropuertoSim00.getCappack();
        
    }//ok
    
//    //Otra version: mas sencilla
//    @Override
//    public Boolean brindaAbasto(Integer idAeropuerto, Date fechaPeticion, Integer nroPaquetes) {
////        throw new UnsupportedOperationException("Not supported yet.");
//        
//        JPAQuery consulta = new JPAQuery(
//                                    Persistence.createEntityManagerFactory("pe.edu.pucp_motor-generador-rutas-RS2_jar_1.0-SNAPSHOTPU", System.getProperties())
//                                        .createEntityManager());
//        
//        QAeropuerto aeropuerto = QAeropuerto.aeropuerto;
//        
//        Aeropuerto aeropuerto00 = consulta.from(aeropuerto).where(aeropuerto.idaeropuerto.eq(idAeropuerto)).uniqueResult(aeropuerto);
//                
//        return aeropuerto00.getNumpack() + nroPaquetes <= aeropuerto00.getCappack();
//        
//    }    
    
}
